package com.yang.edu;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * @Description: 创建mapper接口的代理类的动态代理执行器
 *                  也就是生成代理类的地方
 * @author: Yang Qiang
 * @create: 2021-11-09 21:11
 */
public class YangMapperProxy implements InvocationHandler {

    private YangSqlSession yangSqlSession;

    public YangMapperProxy(YangSqlSession yangSqlSession) {
        this.yangSqlSession = yangSqlSession;
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 通过类名+方法名, 来确定mapper接口里面的方法上面的SQL语句
        String statementId = method.getDeclaringClass().getName() + "." + method.getName();
        // 我们传递一个参数, 所以写args[0]
        return yangSqlSession.selectOne(statementId, args[0]);
    }
}
